#pragma once

#include "njm_camera.hpp"
#include "njm_descriptor.hpp"
#include "njm_game_obj.hpp"

#include <vulkan/vulkan.h>

namespace njm {

    #define MAX_LIGHT_COUNT 10

    struct PointLight
    {
        glm::vec4 position{};
        glm::vec4 color{};
    };

    struct GlobalUbo
    {
        glm::mat4 projection{1.f};
        glm::mat4 view{1.f};
        glm::mat4 inverseView{1.f};
        glm::vec4 ambientLightColor = glm::vec4{1.f, 1.f, 1.f, 0.1f};
        PointLight pointLights[MAX_LIGHT_COUNT];
        uint32_t numLights;
    };

    struct FrameInfo {
        int frameIndex;
        float frameTime;
        VkCommandBuffer commandBuffer;
        NjmCamera& camera;
        VkDescriptorSet globalDescriptorSet;
        NjmGameObj::Map& gameObjects;
    };
}